#ifndef SERIALPORTMANAGER_H
#define SERIALPORTMANAGER_H

#include <QObject>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDateTime>
#include <QDebug>

class SerialPortManager : public QObject
{
    Q_OBJECT
public:
    explicit SerialPortManager(QObject *parent = nullptr);
    ~SerialPortManager();

    // 获取可用串口列表
    QStringList getAvailablePorts();
    // 打开串口
    bool openSerialPort(const QString &portName, int baudRate = 9600);
    // 关闭串口
    void closeSerialPort();
    // 检查串口是否打开
    bool isConnected() const;

    // 新增:发送数据到串口
    bool sendData(const QByteArray &data);

    // 设置串口参数
    void setPortName(const QString &portName) { m_portName = portName; }
    void setBaudRate(int baudRate) { m_baudRate = baudRate; }

signals:
    // 接收到有效数据
    void dataReceived(const QJsonObject &sensorData);
    // 接收到原始数据(用于调试)
    void rawDataReceived(const QByteArray &data);
    // 串口状态变化
    void connectionStatusChanged(bool connected);
    // 错误信息
    void errorOccurred(const QString &error);

private slots:
    void handleReadyRead();
    void handleError(QSerialPort::SerialPortError error);

private:
    QSerialPort *m_serialPort;
    QByteArray m_buffer;
    QString m_portName;
    int m_baudRate;

    QJsonObject parseJsonData(const QByteArray &data);
    bool validateSensorData(const QJsonObject &data);
};

#endif // SERIALPORTMANAGER_H
